const knex = require('./knex');

/**
 * 封装knex
 */
class Base {
    constructor(props) {
        this.table = props;
    }

    /* 查询全部 */
    all() {
        return knex(this.table).select()
    }

    /* key值查询 */
    select(params) {
        return knex(this.table).select().where(params)
    }

    /* 新增 */
    insert(params) {
        return knex(this.table).insert(params)
    }

    /* 修改 */
    update(id, params) {
        return knex(this.table).where('id', '=', id).update(params)
    }

    /* 删除 */
    delete(id) {
        return knex(this.table).where('id', '=', id).del()
    }

    /* 批量ID查询 */
    batchSelect(ids) {
        return knex(this.table).whereIn('id', ids);
    }

    /* key值批量查询 */
    batchKeySelect(key, values) {
        return knex(this.table).whereIn(key, values);
    }

    /* 批量更新 */
    batchUpdate(ids, params) {
        return knex(this.table).whereIn('id', ids).update(params)
    }

    /* 批量删除 */
    batchDel(ids) {
        return knex(this.table).whereIn('id', ids).del()
    }

    /**
     * 分页模糊查询
     * @param {*} params 查询数据
     * @param {*} config 分页配置
     * @returns 
     */
    selectPaging(params, config) {
        let offset = (config.pageSize * (config.page - 1)) || 0;
        let key = '';
        let value = '';
        for (let i in params) {
            key = i;
            value = params[i]
        }

        if (JSON.stringify(params) === "{}") {
            return knex(this.table).select().limit(Number(config.pageSize)).offset(Number(offset));
        } else {
            return knex(this.table).select().where(key, 'like', `%${value}%`).limit(Number(config.pageSize)).offset(Number(offset));
        }
    }

    /**
     * 批量查询分页
     * @param {*} key 查询字段名
     * @param {*} values 查询的数组值
     * @param {*} config 分页配置
     * @returns 
     */
    batchSelectPaging(key, values, config) {
        let offset = (config.pageSize * (config.page - 1)) || 0;

        return knex(this.table).whereIn(key, values).limit(Number(config.pageSize)).offset(Number(offset));
    }
}

module.exports = Base